* subr.el (posn-col-row): Properly compute line spacing.
authorChong Yidong <cyd@stupidchicken.com>
Wed, 15 Apr 2009 22:41:20 +0000 (22:41 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Wed, 15 Apr 2009 22:41:20 +0000 (22:41 +0000)
Suggested by Nikolaj Schumacher (Bug#2933).

lisp/subr.el

index ffe8a9de5b112fe6f917011f5bd6d31e65f07b20..5372adb510cadcd3108fdccc8d71719e78bb8498 100644 (file)
@@ -930,13 +930,19 @@ and `event-end' functions."
       (cons (scroll-bar-scale pair (window-width window)) 0))
      (t
       (let* ((frame (if (framep window) window (window-frame window)))
-            (x (/ (car pair) (frame-char-width frame)))
-            (y (/ (cdr pair) (+ (frame-char-height frame)
-                                (or (frame-parameter frame 'line-spacing)
-                                     ;; FIXME: Why the `default'?
-                                    (default-value 'line-spacing)
-                                    0)))))
-       (cons x y))))))
+            ;; FIXME: This should take line-spacing properties on
+            ;; newlines into account.
+            (spacing (when (display-graphic-p frame)
+                       (or (with-current-buffer (window-buffer window)
+                             line-spacing)
+                           (frame-parameter frame 'line-spacing)))))
+       (cond ((floatp spacing)
+              (setq spacing (truncate (* spacing
+                                         (frame-char-height frame)))))
+             ((null spacing)
+              (setq spacing 0)))
+       (cons (/ (car pair) (frame-char-width frame))
+             (/ (cdr pair) (+ (frame-char-height frame) spacing))))))))
 
 (defun posn-actual-col-row (position)
   "Return the actual column and row in POSITION, measured in characters.